<template>
  <div class="zoom-wrapper">
    <button class="zoom-button" @click="scale('down')">
      <Icon type="md-remove" :size="14" color="#fff"/>
    </button>
    <span class="zoom-number">{{ value }}%</span>
    <button class="zoom-button" @click="scale('up')">
      <Icon type="md-add" :size="14" color="#fff"/>
    </button>
  </div>
</template>

<script>
export default {
  name: 'ZoomController',
  props: {
    value: {
      type: Number,
      default: 100
    },
    step: {
      type: Number,
      default: 20
    },
    min: {
      type: Number,
      default: 10
    },
    max: {
      type: Number,
      default: 200
    }
  },
  methods: {
    scale(type) {
      const zoom = this.value + (type === 'down' ? -this.step : this.step);
      if ((zoom < this.min && type === 'down') ||
        (zoom > this.max && type === 'up')) {
        return;
      }
      this.$emit('input', zoom);
    }
  }
}
</script>

<style scoped lang="less">
  .trans(@duration) {
    transition: ~"all @{duration} ease-in";
  }

  .zoom-wrapper {
    .zoom-button {
      width: 20px;
      height: 20px;
      line-height: 10px;
      border-radius: 50%;
      background: rgba(157, 162, 172, 1);
      box-shadow: 0 2px 8px 0 rgba(218, 220, 223, 0.7);
      border: none;
      cursor: pointer;
      outline: none;

      &:active {
        box-shadow: 0 0 2px 2px rgba(218, 220, 223, 0.2) inset;
      }

      .trans(0.1s);

      &:hover {
        background: #1890ff;
        .trans(0.1s);
      }
    }

    .zoom-number {
      color: #657180;
      padding: 0 8px;
      display: inline-block;
      width: 46px;
      text-align: center;
    }
  }
</style>
